Mapping Child Mortality and Orphanhood Trends: A UNICEF Perspective

Spring 2025 BAA1030 Data Analytics & Story Telling (20074)

Name : Praghya Prakhar

Student ID: A00039396

Programme: Data Analytics

Executive Summary

This report explores global disparities in child mortality and health inequalities, focusing on data provided by UNICEF. It integrates key indicators such as child mortality rates, health access, and education, highlighting the disparities between high-income and low-income countries. The goal is to raise awareness about the urgent need for intervention in countries with the highest mortality rates.

Introduction

Child mortality remains a major issue worldwide, particularly in low-income nations. UNICEF focuses on improving healthcare, access to clean water, and education to reduce these inequalities. This report analyzes the factors contributing to high mortality rates and suggests potential policy actions to support children’s survival and well-being.

Global Child Mortality and Health Inequalities

Child mortality remains a major issue worldwide, particularly in low-income nations.
UNICEF focuses on saving children’s lives by improving access to healthcare, clean water, and education.

Key Insights:

  • Child mortality rates are highest in Sub-Saharan Africa.
  • Economic development strongly impacts health outcomes.
  • Progress has been made, but disparities remain wide.
Code
import pandas as pd
import geopandas as gpd
from plotnine import *
import matplotlib.pyplot as plt
import geodatasets

# Load the CSV files
indicator1 = pd.read_csv("unicef_indicator_1.csv")
indicator2 = pd.read_csv("unicef_indicator_2.csv")
metadata = pd.read_csv("unicef_metadata.csv")

World Child Mortality Map

Code
import plotly.express as px

# Load world map
# Prepare world map
world = gpd.read_file(r'C:\Users\hp\Desktop\UNICEF-Report\data\ne_110m_admin_0_countries\ne_110m_admin_0_countries.shp')

world = world.rename(columns={"NAME_EN": "Country"})

# Merge mortality data
mortality_2020 = indicator1[indicator1['time_period'] == 2020]

import plotly.express as px
import pandas as pd

# Only keep necessary columns (mortality 2020)
mortality_2020 = indicator1[indicator1['time_period'] == 2020]

# Now plot using Plotly
fig = px.choropleth(
    mortality_2020,
    locations="alpha_3_code",  # this must exist in your indicator1 dataset
    color="obs_value",
    hover_name="country",
    color_continuous_scale="Reds",
    title="Global Child Mortality Rates (2020)",
    labels={'obs_value': 'Mortality Rate (per 1000 births)'}
)

fig.update_layout(
    geo=dict(showframe=False, showcoastlines=False),
    margin={"r":0,"t":50,"l":0,"b":0}
)
fig.show()

Top 10 Countries

Code
# Filter data for 2020
mortality_2020 = indicator1[indicator1['time_period'] == 2020]

# Sort by 'obs_value' (mortality rate)
top10 = mortality_2020.sort_values(by="obs_value", ascending=False).head(10)

# Create an interactive bar chart for the top 10 countries
# Create a color palette (or choose one that you like)
colors = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", 
          "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]

# Plot the top 10 countries with different colors
(ggplot(top10, aes(x='reorder(country, obs_value)', y='obs_value', fill='country')) +
 geom_col() +
 scale_fill_manual(values=colors) +  # Apply the color palette
 coord_flip() +
 labs(title="Top 10 Countries by Child Mortality Rate (2020)",
      x="Country", y="Mortality Rate per 1000 births") +
 theme_minimal())

GDP vs Mortality

Code
# Filter data for 2020 using the correct column name ('time_period')
gdp_2020 = indicator2[indicator2['time_period'] == 2020]

# Merge mortality and GDP data
merged = pd.merge(mortality_2020, gdp_2020, left_on="country", right_on="country", suffixes=("_mortality", "_gdp"))

# Create an interactive scatter plot for GDP vs Mortality Rate
import plotly.express as px

fig = px.scatter(
    merged,
    x='obs_value_gdp',
    y='obs_value_mortality',
    title="GDP vs Child Mortality Rate (2020)",
    labels={'obs_value_gdp': 'GDP per Capita', 'obs_value_mortality': 'Mortality Rate per 1000 births'},
    color='obs_value_mortality',
    color_continuous_scale="Viridis"
)

fig.update_layout(
    xaxis_title="GDP per Capita",
    yaxis_title="Mortality Rate per 1000 births",
)

fig.show()

Global Trend Over Time

Code
# Group by time_period (which represents the year) and calculate the average mortality value
avg_mortality = indicator1.groupby('time_period')['obs_value'].mean().reset_index()

# Create an interactive line plot for the average global mortality rate over time
import plotly.express as px

fig = px.line(
    avg_mortality,
    x='time_period',
    y='obs_value',
    title="Average Global Child Mortality Over Time",
    labels={'time_period': 'Year', 'obs_value': 'Average Mortality Rate'},
    markers=True
)

fig.update_layout(
    xaxis_title="Year",
    yaxis_title="Average Mortality Rate"
)

fig.show()

Conclusion

This report presents an in-depth analysis of global child mortality and related health inequalities, emphasizing the importance of improved access to healthcare, clean water, and education. By examining key indicators such as GDP, mortality rates, and orphanhood trends, we observe a significant disparity between high-income and low-income countries. Interventions are urgently needed in regions with high mortality rates to reduce these disparities.